package model.dataStructures;

import java.util.Collection;

/**
 * Interface providing methods that need to be overridden by implementing classes.
 * 
 * @version %I%, %G%
 *
 * @param <K1> type of the first key (must be a number)
 * @param <K2> type of the second key
 * @param <V> type of the value that should be stored in this <code>Map</code>.
 */
public interface IDualMap<K1 extends Number, K2, V> {

	/**
	 * Puts a value to the DualMap. Both keys must be given.
	 * @param key1 
	 * @param key2
	 * @param value
	 */
	void put(K1 key1, K2 key2, V value);
	
	/**
	 * Gets value to the given key.
	 * @param key
	 * @return value to key
	 */
	V get(K1 key);
	
	/**
	 * Gets value to the given key.
	 * @param key
	 * @return value to key
	 */
	V get(K2 key);
	
	/**
	 * 
	 * @return Collection of the values
	 */
	Collection<V> values();
	
	/**
	 * Removes value of the map.
	 * @param key
	 * @param key2
	 * @return
	 */
	V remove(K1 key, K2 key2);

}